অ্যাজাক্স (Ajax)

Multiple File Upload এবং Progress Bar

Web Development - অ্যাজাক্স (Ajax) - Ajax এর মাধ্যমে File Upload (Uploading Files with Ajax) | NCTB BOOK

Ajax এবং HTML5 ব্যবহার করে Multiple File Upload এবং Progress Bar তৈরি করা একটি অত্যন্ত কার্যকর পদ্ধতি, যা ব্যবহারকারীদের পেজ রিফ্রেশ ছাড়াই একাধিক ফাইল আপলোড করার সুযোগ দেয়। Ajax এর মাধ্যমে ফাইল আপলোড করার সময় প্রগ্রেস বার ব্যবহার করা হয়, যা আপলোডের স্ট্যাটাস রিয়েল-টাইমে প্রদর্শন করে। নিচে একটি উদাহরণসহ Ajax এর মাধ্যমে Multiple File Upload এবং Progress Bar কিভাবে কাজ করে তা আলোচনা করা হয়েছে।

উদাহরণ: Ajax এবং HTML5 এর মাধ্যমে Multiple File Upload এবং Progress Bar

১. HTML এবং JavaScript (index.html):

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Multiple File Upload with Progress Bar</title>
</head>
<body>
    <h1>Upload Multiple Files</h1>
    <form id="uploadForm">
        <label for="files">Choose files:</label>
        <input type="file" id="files" name="files[]" multiple required>
        <br><br>
        <button type="button" onclick="uploadFiles()">Upload</button>
    </form>

    <div id="progress-container" style="display: none;">
        <p>Uploading...</p>
        <progress id="progressBar" value="0" max="100"></progress>
    </div>

    <div id="response-container">
        <!-- রেসপন্স বা ত্রুটি মেসেজ এখানে দেখানো হবে -->
    </div>

    <script>
        function uploadFiles() {
            var filesInput = document.getElementById('files');
            var files = filesInput.files;

            if (files.length === 0) {
                document.getElementById("response-container").innerHTML = "Please select at least one file to upload.";
                return;
            }

            // FormData অবজেক্ট তৈরি করা এবং ফাইলগুলো অ্যাড করা
            var formData = new FormData();
            for (var i = 0; i < files.length; i++) {
                formData.append("files[]", files[i]);
            }

            // XMLHttpRequest অবজেক্ট তৈরি করা
            var xhr = new XMLHttpRequest();

            // POST রিকোয়েস্ট ওপেন করা
            xhr.open("POST", "upload_multiple_files.php", true);

            // প্রগ্রেস ইভেন্ট হ্যান্ডল করা
            xhr.upload.onprogress = function(event) {
                if (event.lengthComputable) {
                    var percentComplete = (event.loaded / event.total) * 100;
                    document.getElementById("progressBar").value = percentComplete;
                    document.getElementById("progress-container").style.display = "block";
                }
            };

            // রেসপন্স হ্যান্ডলিং সেট করা
            xhr.onreadystatechange = function() {
                if (xhr.readyState === 4) {
                    if (xhr.status === 200) {
                        document.getElementById("response-container").innerHTML = xhr.responseText;
                    } else {
                        document.getElementById("response-container").innerHTML = "Error uploading files.";
                    }
                    document.getElementById("progress-container").style.display = "none";
                }
            };

            // ত্রুটি হ্যান্ডলিংয়ের জন্য onerror ইভেন্ট হ্যান্ডলার সেট করা
            xhr.onerror = function() {
                document.getElementById("response-container").innerHTML = "Network error occurred. Please try again.";
            };

            // রিকোয়েস্ট পাঠানো
            xhr.send(formData);
        }
    </script>
</body>
</html>

বিস্তারিত ব্যাখ্যা:

  • HTML ফাইলে একটি ফাইল ইনপুট ফিল্ড (<input type="file">) এবং একটি আপলোড বোতাম (<button>) রয়েছে। এখানে multiple অ্যাট্রিবিউট ব্যবহার করে ব্যবহারকারীকে একাধিক ফাইল সিলেক্ট করার অনুমতি দেওয়া হয়েছে।
  • "Upload" বোতামে ক্লিক করলে uploadFiles() ফাংশন কল হবে, যা FormData অবজেক্ট তৈরি করে এবং Ajax এর মাধ্যমে ফাইলগুলো সার্ভারে পাঠাবে।
  • Progress Bar: আপলোডের প্রগ্রেস দেখানোর জন্য একটি প্রগ্রেস বার (<progress>) ব্যবহার করা হয়েছে। এটি আপলোড প্রগ্রেস রিয়েল-টাইমে দেখায়।

২. PHP স্ক্রিপ্ট (upload_multiple_files.php):

<?php
// চেক করা হচ্ছে যে ফাইল আপলোড করা হয়েছে কিনা
if (isset($_FILES['files'])) {
    $files = $_FILES['files'];

    $uploadDir = 'uploads/';
    if (!is_dir($uploadDir)) {
        mkdir($uploadDir, 0777, true);
    }

    $responses = [];

    for ($i = 0; $i < count($files['name']); $i++) {
        $fileName = $files['name'][$i];
        $fileTmpName = $files['tmp_name'][$i];
        $uploadPath = $uploadDir . basename($fileName);

        // ফাইল মুভ করার চেষ্টা করা
        if (move_uploaded_file($fileTmpName, $uploadPath)) {
            $responses[] = "File uploaded successfully: " . $fileName;
        } else {
            $responses[] = "Error uploading file: " . $fileName;
        }
    }

    // রেসপন্স তৈরি করা
    echo implode("<br>", $responses);
} else {
    http_response_code(400); // Bad Request
    echo "No files were uploaded.";
}
?>

বিস্তারিত ব্যাখ্যা:

  1. ফাইল চেক করা:
    • PHP স্ক্রিপ্ট চেক করছে যে একাধিক ফাইল $_FILES এর মাধ্যমে আপলোড করা হয়েছে কিনা।
  2. ফাইল আপলোড পাথ সেট করা:
    • uploads/ নামে একটি ডিরেক্টরি চেক করা হয়েছে এবং সেটি না থাকলে তৈরি করা হয়েছে।
  3. ফাইল লুপ এবং মুভ করা:
    • for লুপ ব্যবহার করে প্রতিটি ফাইলের টেম্পোরারি লোকেশন থেকে আপলোড ডিরেক্টরিতে মুভ করা হয়েছে।
    • প্রতিটি ফাইলের সফল বা ব্যর্থ মেসেজ একটি অ্যারে ($responses) তে সংরক্ষণ করা হয়েছে এবং শেষে তা আউটপুট করা হয়েছে।

ফাইল আপলোড প্রক্রিয়াটি কিভাবে কাজ করে:

JavaScript এবং HTML5:

  • ব্যবহারকারী একাধিক ফাইল সিলেক্ট করে এবং "Upload" বোতামে ক্লিক করে। এরপর uploadFiles() ফাংশন কল হয়।
  • FormData অবজেক্ট ব্যবহার করে ফাইলগুলো অ্যাড করা হয় এবং তা XMLHttpRequest এর মাধ্যমে সার্ভারে পাঠানো হয়।

PHP স্ক্রিপ্ট:

  • PHP স্ক্রিপ্ট প্রতিটি ফাইল প্রক্রিয়া করে এবং আপলোড ডিরেক্টরিতে সংরক্ষণ করে।
  • সফল হলে একটি মেসেজ রিটার্ন করে, অন্যথায় ত্রুটি মেসেজ রিটার্ন করে।

Progress Bar:

  • JavaScript এ xhr.upload.onprogress ইভেন্ট হ্যান্ডলার ব্যবহার করে ফাইল আপলোডের প্রগ্রেস দেখানো হয়েছে।

Ajax এবং HTML5 এর মাধ্যমে Multiple File Upload এর সুবিধা:

  • সহজ এবং কার্যকর আপলোড প্রক্রিয়া: একাধিক ফাইল সিলেক্ট করে একসাথে আপলোড করা যায়।
  • Progress Bar: প্রগ্রেস বার ব্যবহার করে ফাইল আপলোডের সময় ব্যবহারকারীকে রিয়েল-টাইম আপডেট দেওয়া যায়।
  • Error Handling: Ajax এর মাধ্যমে ত্রুটি হ্যান্ডল করা সহজ এবং সার্ভার থেকে সঠিক মেসেজ প্রদান করা যায়।
  • পেজ রিফ্রেশ ছাড়াই আপলোড: Ajax ব্যবহার করে পেজ রিফ্রেশ ছাড়াই ফাইল আপলোড করা যায়, যা ব্যবহারকারীর জন্য একটি ভালো অভিজ্ঞতা দেয়।

সারসংক্ষেপ:

  • Ajax এবং HTML5 Integration: Ajax এবং HTML5 এর FormData এবং XMLHttpRequest ব্যবহার করে একাধিক ফাইল আপলোড করা হয়েছে।
  • PHP Server-Side Handling: PHP সার্ভারে ফাইল প্রক্রিয়া এবং ত্রুটি হ্যান্ডলিং করা হয়েছে।
  • Dynamic Feedback: প্রগ্রেস বার এবং ত্রুটি মেসেজের মাধ্যমে ব্যবহারকারীকে ডায়নামিক ফিডব্যাক প্রদান করা হয়েছে।

এই উদাহরণটি অনুসরণ করে Ajax এবং HTML5 ব্যবহার করে Multiple File Upload এবং Progress Bar কিভাবে কাজ করে তা বোঝা যায়। এটি একটি অত্যন্ত গুরুত্বপূর্ণ দক্ষতা, যা ওয়েব অ্যাপ্লিকেশন ডেভেলপমেন্টে প্রয়োজনীয়।

Promotion